home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Medal Software 3
/
Gold Medal Software - Volume 3 (Gold Medal) (1994).iso
/
prog
/
mgcomtp0.arj
/
MG_ENG.DOC
next >
Wrap
Text File
|
1980-01-01
|
32KB
|
986 lines
* ───────────────────────────────────────────── * /
/ //
/ / /
/ / /
/ / /
/ / /
/ MGCOMTP v0.9b / /
/ Copyright 1994 by Mark Gauthier. / /
/ / /
/ / /
/ / /
/ / /
┌──────────────────────────────────────────────────────┐ /
│ │ /
│ HS AA CD OH RD SD TR MR │ /
│ │/
└──────────────────────────────────────────────────────┘
C O M U N I C A T I O N F U N C T I O N S & P R O C E D U R E S
WHAT IS MGCOMTP
───────────────
It a unit for TURBO PASCAL that content many procedures and
functions to access comport. It is possible to access up to
eight ports simultaneously and these ports can be open via a
fossil driver or an interrupt that use 8250 registers.
IMPORTANT
─────────
This software is SHAREWARE so, i don't guaranty anything
except it will take space on your disk. You are responsible
of any damage that could, append during execution of this
program.
REQUIREMENT
───────────
TURBO PASCAL VERSION 5.5, 6, 7, or BORLAND PASCAL 7.0
You must rename coresponding file to .TPU.
MGCOMTP0.TP5 -> MGCOMTP0.TPU ( TP 5.5 )
MGCOMTP0.TP6 -> MGCOMTP0.TPU ( TP 6.0 )
MGCOMTP0.TP7 -> MGCOMTP0.TPU ( TP 7.0, BP 7.0 Real Mode )
MGCOMTP0.TPP -> ( BP 7.0 Protected mode )
REGISTERED
──────────
If you plan to use this software, please complete
the information sheet at the bottom of this document.
HOW TO CONTACT AUTHOR
─────────────────────
By electronics mail on any system:
FIDONET
Mark Gauthier ─> 1:242/818.5
FRANCOMEDIA
Mark Gauthier ─> 101:160/305.5
or by mail.
MGCOM / MARK GAUTHIER
58 Émilien─FRÉNETTE, Sainte─THÉRESE.
QUÉBEC, CANADA
J7E 5K3
FUNCTION OPENCOM
──────────────────────────────────────────────────────────────────────────
SYNTAX: OpenCom(ComPort:Byte; C: Connect_Type): Boolean;
DESCRIPTION:
Open a comport whit or whitout a FOSSIL driver.
Case type of connection is PORTS, then this function
reserve buffers of transmission and install an interrupt.
PARAMETERS:
comport; a number from 1─8, port to open.
C; How to open port via fossil = FOSSIL, whitout = PORTS.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt;
{ Open whit fossil COM1 }
END.
BEGIN
IF NOT OpenCom(1, Ports) THEN Halt;
{ Open whitout fossil COM1 }
END.
PROCEDURE CLOSECOM
──────────────────────────────────────────────────────────────────────────
SYNTAX: CloseCom(ComPort:Byte);
DESCRIPTION:
Close a comport that was previously open via function
OpenCom. If com was open whitout fossil, interrupt driver is
uninstall and buffers are clears. DTR is leave high.
PARAMETERS:
comport; a number from 1─8, port number to close.
EXAMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
CloseCom(1); { CLOSE COM1 }
END.
PROCEDURE CLOSEALLCOMS
──────────────────────────────────────────────────────────────────────────
SYNTAX: CloseAllComs;
DESCRIPTION:
Procedure that made exactly the same thing than CloseCom,
except this one close all com currently open via function
OpenCom.
PARAMETERS:
Nothing;
EXAMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1 }
IF NOT OpenCom(2, Fossil) THEN Halt; { Open COM2 }
CloseAllComs; { Close COM's }
END.
PROCEDURE HANGUP
──────────────────────────────────────────────────────────────────────────
SYNTAX: HangUp;
DESCRIPTION:
Procedure that drop line using DTR. It leave DTR low for
some 1/1000sec, and return whit DTR high. Another way to do
this is to send "+++" wait a bit, and send ATH+#13.
PARAMETERS:
Nothing;
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) Then; { OPEN COM1 }
{ } { Any code. }
HangUp; { Dropping the line }
CloseAllComs; { Close all com's. }
END.
FUNCTION CHECKCD
──────────────────────────────────────────────────────────────────────────
SYNTAX: CheckCD(ComPort:Byte): Boolean;
DESCRIPTION:
Function that verify the status of CARRIER DETECT that
itself specify if line is up or down. If CARRIER DETECT is
on this function will return TRUE else it return FALSE.
PARAMETERS:
comport; a number from 1─8, com number to check.
EXEMPLE:
CONST ESC = 27;
VAR Ch:Char;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1 }
REPEAT
Ch:=ReadKey; { Enter character }
Write(Ch); { Writing }
IF NOT CheckCD(1) THEN { Check CD value. }
Write('line cut. '); { CD is OFF }
UNTIL Ch=Esc; { While <> ESC }
END.
PROCEDURE SETDTR
──────────────────────────────────────────────────────────────────────────
SYNTAX: SetDTR(ComPort:Byte; S:Boolean);
DESCRIPTION:
Procedure that set the status of DTR. If S = TRUE then
DTR is set high, else dtr is set to low.
PARAMETERS:
comport; a number from 1─8, comport number to set dtr.
S; specify if a DTR must be low or high.
EXEMPLE:
USES Crt;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
SetDTR(1, TRUE); { DTR (COM1) High }
SetDTR(1, FALSE); { DTR (COM1) Low }
END.
PROCEDURE PURGEINPUT
──────────────────────────────────────────────────────────────────────────
SYNTAX: PurgeInput(ComPort:Byte);
DESCRIPTION:
Procedure use to destroyed all waiting data in the input
Buffer.
PARAMETERS:
comport; a number from 1─8, com number where you drop data.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 } }
PurgeInput(1); { PURGE INPUT BUFFER }
END.
PROCEDURE PURGEOUTPUT
──────────────────────────────────────────────────────────────────────────
SYNTAX: PurgeOutput(ComPort:Byte);
DESCRIPTION:
This procedure is similar to Purge Input, except that
output buffer is clear.
PARAMETERS:
comport; a number from 1─8, com number to clear OutBuf.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
PurgeOutput(1); { PURGE OUTPUT BUFFER }
END.
PROCEDURE FLUSHOUTPUT
──────────────────────────────────────────────────────────────────────────
SYNTAX: FlushOutPut(ComPort:Byte);
DESCRIPTION:
This procedure wait until all characters in output buffer
are send before returning.
EXEMPLE:
BEGIN
IF NOT OpenCom(1 Fossil) THEN Halt; { OUVERTURE cause COM }
FlushOutput(1); { FLUSH "OUTPUT" (COM1) }
END.
FUNCTION READCH
──────────────────────────────────────────────────────────────────────────
SYNTAX: ReadCh(ComPort:Byte): Char;
DESCRIPTION:
Function that verify if a character is waiting in the
input buffer. If no character is available, the result return
is #0. If a characters is available then the result is the
character number.
PARAMETERS:
comport; a number from 1─8, com number to scan.
EXEMPLE:
VAR Ch:Char;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
REPEAT
Ch:=ReadCh(1); { SCAN COM1 }
UNTIL CH <> #0; { if a character is }
END. { received then EXIT.} }
FUNCTION READCHW
──────────────────────────────────────────────────────────────────────────
SYNTAX: ReadChW(ComPort:Byte): Char;
DESCRIPTION:
Function similar to ReacCh, except this one return only
when character is available.
PARAMETERS:
comport; a number from 1─8, com number to scan.
EXEMPLE:
VAR Ch:Char;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
Ch:=ReadChW(1); { SCAN COM1 }
END.
FUNCTION MULTIRECVCH
──────────────────────────────────────────────────────────────────────────
SYNTAX: MultiRecvCh(VAR ComPorts: Byte): Char;
DESCRIPTION:
Function that return a character from one of the
specify COM in parameter Comports. If all port specify by
Comports as been scan and no character is available then
result is #0. If one character as been pick─up, then
result contain the character number and comports, contain
the com number where the character as been pick─up.
PARAMETERS:
comports; hold port number's to be scan.
7 6 5 4 3 2 1 0 (Bits)
│ │ │ │ │ │ │ └> COM1
│ │ │ │ │ │ └──> COM2
│ │ │ │ │ └────> COM3
│ │ │ │ └──────> COM4
│ │ │ └────────> COM5
│ │ └──────────> COM6
│ └────────────> COM7
└──────────────> COM8
EXEMPLE:
VAR ComPorts:Byte;
Ch:Char;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1 }
IF NOT OpenCom(3, Fossil) THEN Halt; { Open COM3 }
ComPorts:=1+4; { Com1+Com3 }
REPEAT
Ch:=MultiRecvCh(ComPorts); { SCAN COM1 & COM3 }
UNTIL CH <> #0; { while than <> #0 }
END.
FUNCTION MULTIRECVCHW
──────────────────────────────────────────────────────────────────────────
SYNTAX: MultiRecvChW(VAR ComPorts: Byte): Char;
DESCRIPTION:
Function similar to MultiRecvCh, except, this one will
not return until a character is available.
PARAMETERS:
comports; hold port number's to be scan.
7 6 5 4 3 2 1 0 (Bits)
│ │ │ │ │ │ │ └> COM1
│ │ │ │ │ │ └──> COM2
│ │ │ │ │ └────> COM3
│ │ │ │ └──────> COM4
│ │ │ └────────> COM5
│ │ └──────────> COM6
│ └────────────> COM7
└──────────────> COM8
EXEMPLE:
VAR ComPorts:Byte;
Ch:Char;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
IF NOT OpenCom(3, Fossil) THEN Halt; { OPEN COM3 }
ComPorts:=1+4; { Com1+Com3 }
Ch:=MultiRecvChW(ComPorts); { SCAN COM1 & COM3 }
END.
FUNCTION READBLOCK
──────────────────────────────────────────────────────────────────────────
SYNTAX: ReadBlock(ComPort:Byte; BufPtr: Pointer;
MaxRead:Word): Word;
DESCRIPTION:
Function that transfer a specify number of bytes from input
buffer to a user buffer. The result of the function indicate
the number of bytes transfer.
PARAMETERS:
comport; a number from 1─8, com buffer number to be scan.
BufPtr; Pointer, that point your buffer (user buffer).
MaxRead; Maximum number of characters to transfert usualy this
is your buffer size.
EXEMPLE:
VAR BytesRead:Word;
BUF : Array[1 10] OF Char;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1 }
BytesRead:=ReadBlock(1,Addr(Buf[1]),Size(Buf)); { READ Buf }
END.
FUNCTION WRITECH
──────────────────────────────────────────────────────────────────────────
SYNTAX: WriteCh(ComPort:Byte; Ch:Char): Boolean;
DESCRIPTION:
Function that send a character, return true is the
character as been accept and put in output buffer else
return false.
PARAMETERS:
comport; a number from 1─8, com number to send ch.
Ch; character to send.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
IF NOT WriteCh(1, '!') THEN { SEND character }
Write('a "buffer" is full.');
END.
PROCEDURE WRITECHW
──────────────────────────────────────────────────────────────────────────
SYNTAX: WriteChW(ComPort:Byte; Ch:Char);
DESCRIPTION:
Procedure similar to WriteCh, except this one will not
return until it find a place in output buffer for your
character.
PARAMETERS:
ComPort; a number from 1─8, com number to send character.
Ch; character to send.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
WriteChW(1, '!') { SEND character }
END.
PROCEDURE WRITESTRW
──────────────────────────────────────────────────────────────────────────
SYNTAX: WriteStrW(ComPort:Byte; S:String);
DESCRIPTION:
Procedure that send a string. Procedure will not return
until all character of the string as been send.
PARAMETERS:
ComPort; a number from 1─8, com number to send string.
S; String of character.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
WriteStrW(1, 'Hello!!!') { SEND STRING }
END.
PROCEDURE WRITESTRLNW
──────────────────────────────────────────────────────────────────────────
SYNTAX: WriteStrLnW(ComPort:Byte; S:String);
DESCRIPTION:
Procedure similar to WriteStrW, except this one
add linefeed and Carriage Return code to the end of your
string.
PARAMETERS:
comport; a number from 1─8, com number to send string.
S; a string of character.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
WriteStrLnW(1, 'Hello!!!') { SEND STRING }
END.
PROCEDURE WRITESTRDELAY
──────────────────────────────────────────────────────────────────────────
SYNTAX: WriteStrDelay(ComPort:Byte; S:String; x: Word);
DESCRIPTION:
Procedure that send a string of character, and take a pause
of X 1/1000sec between each character. This procedure
do not return until all character of the string as been send.
PARAMETERS:
comport; a number from 1─8, com number to send string.
S; a string of character.
X; number of 1/1000sec between each sends.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
WriteStrDelay(1, 'Hello!!!', 55) { SEND STRING }
END.
PROCEDURE WRITESTRLNDELAY
──────────────────────────────────────────────────────────────────────────
SYNTAX: WriteStrLnDelay(ComPort: Byte; S:String; x: Word);
DESCRIPTION:
Procedure similar to WriteStrDelay, except this one
add linefeed and Carriage Return to your string.
PARAMETERS:
comport; a number from 1─8, com number to send string.
S; a string of character.
X; number of 1/1000sec to wait between each sends.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
WriteStrLnDelay(1, 'Hello!!!', 55) { SEND STRING }
END.
FUNCTION WRITEBLOCK
──────────────────────────────────────────────────────────────────────────
SYNTAX: WriteBlock(ComPort:Byte; BufPtr:Pointer;
MaxSend:Word): Word;
DESCRIPTION:
Function that transfer data from user buffer, to output
buffer. The function result content the number of byte
transfer.
PARAMETERS:
comport; a number from 1─8, com buffer number to transfer.
BufPtr; Pointer, that point on user buffer.
MaxSend; Maximum number of characters to transfer usually,
the size of user buffer.
EXEMPLE:
CONST Buf:Array[1 5] OF CHAR = ('1' '2' '3' '4' '5');
x:Word;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
x:=WriteBlock(1, Addr(Buf[1]), SizeOf(Buf));
{ TRANSFERE BUFFER. }
{ X = a number of characters accept. }
END.
PROCEDURE MULTISENDCHW
──────────────────────────────────────────────────────────────────────────
SYNTAX: MultiSendChW(var ComPorts: Byte; ch:Char);
DESCRIPTION:
Procedure that send a character in all com specify in
parameter Comports. It will not return until all com
accept the character.
PARAMETERS:
comports; hold port's number to use.
7 6 5 4 3 2 1 0 (Bits)
│ │ │ │ │ │ │ └> COM1
│ │ │ │ │ │ └──> COM2
│ │ │ │ │ └────> COM3
│ │ │ │ └──────> COM4
│ │ │ └────────> COM5
│ │ └──────────> COM6
│ └────────────> COM7
└──────────────> COM8
Ch; Character to be send.
EXEMPLE:
VAR ComPorts:Byte;
Ch:Char;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { Open a COM1 }
IF NOT OpenCom(3, Fossil) THEN Halt; { Open a COM3 }
ComPorts:=1+4; { Com1+Com3 }
Ch:=#27;
MultiSendChW(ComPorts,Ch); { Send in COM1 & COM3 }
END.
FUNCTION MULTISENDCH
──────────────────────────────────────────────────────────────────────────
SYNTAX: MultiSendCh(ComPorts: Byte; ch:Char): Byte;
DESCRIPTION:
Function similar a la procedure MultiSendChW, except
this one will not wait to send the character in all com.
The function result hold which com have accept the character.
PARAMETERS:
comports; hold port's number to use.
7 6 5 4 3 2 1 0 (Bits)
│ │ │ │ │ │ │ └> COM1
│ │ │ │ │ │ └──> COM2
│ │ │ │ │ └────> COM3
│ │ │ │ └──────> COM4
│ │ │ └────────> COM5
│ │ └──────────> COM6
│ └────────────> COM7
└──────────────> COM8
Ch; Character to be send.
EXEMPLE:
VAR ComPorts:Byte;
Ch:Char;
Accept:Byte;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { Open COM1 }
IF NOT OpenCom(3, Fossil) THEN Halt; { Open COM3 }
ComPorts:=1+4; { Com1+Com3 }
Ch:=#27;
Accept:=MultiSendCh(ComPorts,Ch); { Send Ch all COM }
If Accept and 1 = 1 Then Write('Com1 Accept ch');
If Accept and 4 = 4 Then Write('Com3 Accept ch');
END.
PROCEDURE SETHANDSHAKE
──────────────────────────────────────────────────────────────────────────
SYNTAX: SetHandShake(ComPort:Byte; HARD, Soft: Boolean);
DESCRIPTION:
Procedure that change the verification of transmit mode.
if HARD is TRUE, then RTS/CTS mode is active. If
SOFT is TRUE then Xon/Xoff mode is active. If they are
FALSE they are desactived.
PARAMETERS:
comport; a number from 1─8, com number to set.
Hard; Status of RTS/CTS mode.
Soft; Status of XON/XOFF mode.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
SetHandShake(1,TRUE,TRUE); { COM1 <─RTS/CTS ON }
{ COM1 <─Xon/XOFF ON }
END.
PROCEDURE SETPARAMS
──────────────────────────────────────────────────────────────────────────
SYNTAX: SetParams(ComPort:Byte; Baud:LongInt; WordSize:Byte;
Parity:Char; StopBits:Byte);
DESCRIPTION:
Modify communication parameters for a comport.
PARAMETERS:
comport; a number from 1─8, com number to modify.
Baud; Transmission speed.
if : PORT ─> (300─115200) : FOSSIL ─> (300─38400)
Word Size; from 5─8.
Parity; 'N' ─> NONE,
'O' ─> ODD,
'E' ─> EVEN.
EXEMPLE:
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
SetParams(1,2400,8,'N',1); { MODIFY COM1 }
END.
PROCEDURE SETCOMHARDWARE
──────────────────────────────────────────────────────────────────────────
SYNTAX: SetComHardWare(ComPort:Byte; COMADDR, ComIntr: Word);
DESCRIPTION:
Modify hardware setting for a comport. This procedure
do nothing on comport open whit fossil. You will need to
use type ports to open special comport address or interrupt.
PARAMETERS:
comport; a number from 1─8, com number to set.
ComAddr; HARDWARE address of this port.
ComIntr; INTERRUPT to use for this port.
EXEMPLE:
{ STANDART for COM1 is ADDR = $3F8 and INTR = 4 }
BEGIN
{ Exemple of NON STANDARD ─> COM1 = $3F8 and INTR = 3 }
IF NOT OpenCom(1, Ports) THEN Halt; { OPEN COM1 }
SetComHardWare(1,$3F8,3); { MODIFY COM1 }
END.
FUNCTION GETFOSSILNAME
──────────────────────────────────────────────────────────────────────────
SYNTAX: GETFOSSILNAME (ComPort:Byte; Var ID: String): Boolean;
DESCRIPTION:
Function that return the fossil driver name for a specify
port. If this function return false the port specify is not
open whit a fossil driver so ID is unpredictable. If the return
value is TRUE ID contain the fossil driver name.
PARAMETERS:
comport; a number from 1─8, com number to get info.
ID; Contain the fossil driver name.
EXEMPLE:
VAR Name:String;
BEGIN
IF NOT OpenCom(1, Fossil) THEN Halt; { OPEN COM1 }
GetFossilName(1, Name); { Recover name. }
END.
FUNCTION GETSTATUS
──────────────────────────────────────────────────────────────────────────
SYNTAX: GetStatus(ComPort:Byte): Word;
DESCRIPTION:
Function that return status for an open port. Status
is different between Fossil and ports.
if COMPORT was open whit FOSSIL:
14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (Bits)
│ │ │ │ │
│ │ │ │ └───────────────> "CARRIER Detect"
│ │ │ └─────────────────> character available.
│ │ └───────────────────> input buffer overflow
│ │
│ │
│ └──────────────────────────────> space in output buffer
└─────────────────────────────────> output buffer empty
if COMPORT was open whit PORTS:
7 6 5 4 3 2 1 0 (Bits)
│ │ │ │ │ │ │ └──> input buffer empty.
│ │ │ │ │ │ └────> input buffer full.
│ │ │ │ │ └──────> output buffer empty.
│ │ │ │ └────────> output buffer full.
│ │ │ └──────────> input buffer overflow.
│ │ └────────────> output buffer overflow.
│ └──────────────> RTS/CTS.
└────────────────> Xon/XOFF.
PARAMETERS:
comport; a number from 1─8, com number to get info.
EXEMPLE:
VAR Info:Word;
BEGIN
IF NOT OpenCom(1 Fossil) THEN Halt; { OPEN COM1 }
Info:=GetStatus(1); { Recover STATUS }
IF INFO AND 256 = 256 Then; { character available ? }
END.
REGISTERED INFO for MGCOM_TP v0 9
───────────────────────────────
Last name : ______________________________
First name : ______________________________
Address : ____________________________________________
City : ________________________
State : ____________________
Country : _________________
ZIP : _________________
DATE : _________________
Where did you get MGCOMTP ? ____________________________________________
***********************************************************************
A payment of 25$CAN or 20$US must be made to MARK GAUTHIER.
DON'T send cash, if you do so, you take the risk that your money
can be intercept.
***********************************************************************
Comments:
: ___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
___________________________________________________________________
MGCOM / MARK GAUTHIER
58 Emilien_FRENETTE, Sainte-Thérèse
PQ, CANADA
J7E 5K3